package core

// ProcessorCreator 是一个函数类型，用作具体 Processor 实现的构造器。
// 工厂（factory）使用它来实例化所需的处理器。
type ProcessorCreator func() Processor

// Processor 代表 ETL 管道中的一个转换步骤。
// 它是管道中的“主力”，可以被串联起来执行各种任务，
// 例如筛选行、重命名列、脱敏数据或丰富记录。
type Processor interface {
	// Open 允许处理器根据配置进行一次性初始化。
	// 它在第一条记录被处理前调用。例如，一个过滤处理器可以在此预编译正则表达式以提高效率。
	Open(config map[string]interface{}) error

	// Process 是核心转换逻辑，负责处理单条记录。
	//
	// 实现此方法时需遵循明确的返回约定：
	// - 若要将转换后的记录传给下一步，返回 (transformedRecord, nil)。
	// - 若要丢弃（过滤）当前记录，返回 (nil, nil)。
	// - 若发生严重错误并希望中止整个管道，返回 (nil, err)。
	Process(record Record) (Record, error)

	// Close 用于释放在 Open 阶段获取的资源。
	// 它在最后一条记录处理完毕后调用。
	// 对于无状态的处理器，此方法可以是一个空实现。
	Close() error
}
